package com.atguigu.partition;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/*
    在该类中去实现ReduceTask中需要实现的业务逻辑代码
     Reducer<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
        两组：
            KEYIN ：读取的Key的类型（Mapper写出的key的类型）
            VALUEIN ：读取的value的类型（Mapper写出的value的类型）

            KEYOUT：写出的key的类型（在这是单词的类型）
            VALUEOUT：写出的value的类型（在这是单词的数量的类型）

 */
public class WCReducer extends Reducer<Text, LongWritable,Text,LongWritable> {
    //封装的value
    private  LongWritable outValue = new LongWritable();
    /**
     * 在该方法中去实现ReduceTask中需要实现的业务逻辑代码
     * 该方法在被循环调用每调用一次传入一组数据
     * @param key 读取的key
     * @param values 读取的所有的value
     * @param context 上下文（在这用来将数据写出去）
     * @throws IOException
     * @throws InterruptedException
     *
     * aaa   1
     * aaa   1    ========>            aaa  2
     *
     */
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
        long sum = 0;//value的和
        //1.遍历所有的value
        for (LongWritable value : values) {
            //2.对所有的value进行累加
            long v = value.get();//将LongWritable转换成long
            sum += v;
        }
        //3.封装key,value
        //设置value的值
        outValue.set(sum);
        //4.将key,value写出去
        context.write(key,outValue);
    }
}
